package com.xcw.test.caozuo;

import java.util.*;

/**
 * @author bhx
 * @Class P10_
 * @date 2022/11/13 3:27
 * @Description TODO
 */

/**
 * 元旦快到了，校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡，他要把购来的纪念品根据价格进行分组，但每组最多只能包括两件纪念品， 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品，乐乐希望分组的数目最少。
 * 你的任务是写一个程序，找出所有分组方案中分组数最少的一种，输出最少的分组数目。
 *
 * input：
 * 第 1 行包括一个整数 w，为每组纪念品价格之和的上限。
 * 第 2 行为一个整数n，表示购来的纪念品的总件数。
 * 第 3 ~ n+2 行每行包含一个正整数 pi ( 5 ≤ pi ≤ w ) ，表示所对应纪念品的价格。
 * output：
 * 包含一个整数，即最少的分组数目。
 */
public class P17_ {
    private static Scanner scanner;

    //  获取最小组
    public static int getMinZu(List<Integer> list, int maxCost){
        int sum = 0;
        // 排序  从小到大
        Collections.sort(list);
        while(list.size() > 0){
            if ((list.size() != 1)&&(list.get(list.size() - 1) + list.get(0) <= maxCost)){
                list.remove(list.size() - 1);
                list.remove(0);
                sum++;
            } else {
                list.remove(list.size() - 1);
                sum++;
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        scanner = new Scanner(System.in);
        int maxCost = scanner.nextInt();
        scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            scanner = new Scanner(System.in);
            list.add(scanner.nextInt());
        }
        System.out.println(getMinZu(list, maxCost));
    }

}
